package api

import (
	"batbat-backend/app/model"
	"batbat-backend/app/service"
	"batbat-backend/library/response"
	"github.com/gogf/gf/errors/gerror"
	"github.com/gogf/gf/frame/g"
	"github.com/gogf/gf/net/ghttp"
)

var Oss = ossApi{}

type ossApi struct{}

// Upload
// @summary 上传文件
// @tags 	文件
// @accept	mpfd
// @param 	Authorization header string true "token"
// @param	file formData file true "要上传的文件"
// @produce	json
// @success	200 {object} response.JsonResponse{data=string} "data为上传后的文件路径"
// @router /oss [POST]
func (o *ossApi) Upload(r *ghttp.Request) {
	// 获取用户上下文
	var user *model.UserContext
	err := r.GetCtxVar(model.UserContextKey).Scan(&user)
	if err != nil {
		g.Log().Ctx(r.Context()).Errorf("获取用户信息失败: %v", err)
		response.Error(r, gerror.New("上传文件失败"))
	}
	// 获取上传的文件
	ufile := r.GetUploadFile("file")
	if ufile == nil {
		response.Error(r, gerror.New("必须选择上传的文件"))
		return
	}
	// 上传文件
	url, err := service.Oss.Upload(r.Context(), user.Id, ufile)
	if err != nil {
		response.Error(r, err)
	}
	response.Success(r, url)
}
